草庐IT

Java BufferedImage 内存消耗

全部标签

java - 在 log4j 的内存 'list appender' 中

log4j是否有一个仅存储日志记录事件列表的附加程序(用于单元测试,以验证没有写入错误日志)? 最佳答案 有一个MemoryAppender,但它不是标准log4j库的一部分。您可以轻松编写自己的代码,但如果您仅将它们用于单元测试,我可能会模拟Logger并断言没有调用它。覆盖目标类中的getLogger()方法或直接在类型上设置模拟Logger。使用Jmock(内存中的例子,如有错误请见谅):publicvoidtestDoFoo(){Mockerymockery=newMockery();LoggermockLogger=moc

java - 是否应该将 Disruptor (LMAX) 与内存和 CQRS 中的大模型一起使用?

出于性能原因,我们的系统结构化模型(大约30个具有多种关系的不同实体)完全保存在内存(大约10Gb)中。在这个模型上我们必须做3种操作:更新一个或几个实体查询特定数据(这通常需要读取数千个实体)获取统计数据(使用了多少内存,有多少种查询等)目前该体系结构是一个相当标准的体系结构,具有使用共享模型的servlet线程池。在模型内部有很多并发集合,但仍然有很多等待,因为一些实体“更热”并且大多数线程想要读/写它们。另请注意,通常查询比写入消耗更多的CPU和时间。我正在研究切换到Disruptor架构的可能性,将模型保持在单个线程中,将所有可能的东西(有效性检查、审计等)从模型中转移到单独的

java - volatile 关键字和内存一致性错误

在oracleJava文档中locatedhere,下面说:Atomicactionscannotbeinterleaved,sotheycanbeusedwithoutfearofthreadinterference.However,thisdoesnoteliminateallneedtosynchronizeatomicactions,becausememoryconsistencyerrorsarestillpossible.Usingvolatilevariablesreducestheriskofmemoryconsistencyerrors,becauseanywrite

java - VisualVM:理想的堆内存使用图

我正在使用VisualVM监控我的Java应用程序(用JDK1.7编写)。下图显示了此应用程序运行期间的堆内存使用情况。查看此图,您会发现其中有很多尖峰。这些尖峰表明应用程序创建了对象。一旦应用程序处理完它们,它就会使用gc(在这种情况下隐式调用)销毁它们。此外,这是应用程序仍在运行时内存分析器的屏幕截图对我来说,图形的上下性质表明java对象的有效使用。这个推断对吗?堆使用图的理想性质是什么?是否有任何其他方法可以改善我的应用程序的堆内存使用情况? 最佳答案 Tometheupanddownnatureofthegraphindi

内存中的Java原始数组布局

以下是我提出问题的两个示例(假设您在此处有JOL):Layouterlayout32Bits=newHotSpotLayouter(newX86_32_DataModel());Layouterlayout64BitsComp=newHotSpotLayouter(newX86_64_COOPS_DataModel());还有一个使用这个的例子:int[]ints=newint[10];System.out.println(ClassLayout.parseInstance(ints,layout32Bits).toPrintable());System.out.println(Cla

java - 如何获取Java堆的内存地址?

如何确定当前进程中运行的JVM的Java堆在内存中的地址?也就是说,使用Java、C或其他调用获取一个void*指针或等效于JVM为堆分配的连续内存区域?Matlab在其进程中嵌入了一个JVM。JVM分配的内存不可用于Matlab数组,其中,堆很重要,因为它占用了一大块连续的内存并且从不收缩,而Matlab的数组也需要连续的内存。如果在扩展期间重新分配堆,可能会导致碎片。我想检测我的进程来检查Java堆和Matlab的内存View之间的交互,并找出它何时因调整大小而移动,最好是在进程内。这需要堆的地址。从java.lang.Runtime很容易找到堆大小,但不是它在内存中的地址。如何做

java - Swing 拖放导致内存泄漏

我有一个JFrame可以接受顶级文件。但是,在发生丢弃之后,对框架的引用将无限期地保留在某些Swing内部类中。我相信处理框架应该释放它的所有资源,那么我做错了什么?例子importjava.awt.datatransfer.DataFlavor;importjava.io.File;importjava.util.List;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.TransferHandler;publicclassDnDLeakTesterextendsJFrame{publicstat

java - 防止 ConcurrentLinkedQueue<T> 出现内存不足异常

使用ConcurrentLinkedQueue时,如何限制队列的大小。是否有可能通过内存不足异常? 最佳答案 ConcurrentLinkedQueue的大小是无限的,所以如果生产者放入元素的速度快于消费者移除元素的速度,最终它确实会耗尽你的内存。如果你想限制队列的大小,试试阻塞队列,比如LinkedBlockingQueue或ArrayBlockingQueue反而。第一个的大小可以有选择地限制,而第二个总是有限制的。 关于java-防止ConcurrentLinkedQueue出现内

java - 避免回调中的内存泄漏?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Howtoavoidmemoryleaksincallback?EffectiveJava说:Athirdcommonsourceofmemoryleaksislistenersandothercallbacks.IfyouimplementanAPIwhereclientsregistercallbacksbutdon’tderegisterthemexplicitly,theywillaccumulateunlessyoutakesomeaction.Thebestwaytoensurethatcallb

java - 如何让JVM释放内存给OS

这个问题在这里已经有了答案:DoesGCreleasebackmemorytoOS?(5个答案)关闭4年前。我正在为我的应用程序使用GC选项XX:+UseParNewGC-XX:+UseConcMarkSweepGC。正如你们中的大多数人已经体验到的那样,JVM擅长将堆增加到最大堆大小,但是它不会将内存释放回操作系统。我遇到了-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio但并行垃圾收集器忽略了这些。-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio组合是否有强制JVM将内存释放回操作系统的特殊选项。